package cn.com.yinhex.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * Java模拟Post提交
 */
public class PostHttp {

    /**
     * Java模拟Post提交
     * 
     * @param url 要提交到的位置
     * @param data 例如：NameValuePair[] data = {new NameValuePair("key", "nike"),new NameValuePair("proClass", "")};
     * @return 返回HTML代码
     */
    public static String methodPost(String url, NameValuePair[] data) {

        String response = "";// 要返回的response信息
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);
        // 将表单的值放入postMethod中
        postMethod.setRequestBody(data);
        // 执行postMethod
        int statusCode = 0;
        try {
            statusCode = httpClient.executeMethod(postMethod);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // HttpClient对于要求接受后继服务的请求，象POST和PUT等不能自动处理转发
        // 301或者302
//        if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
//            // 从头中取出转向的地址
//            Header locationHeader = postMethod.getResponseHeader("location");
//            String location = null;
//            if (locationHeader != null) {
//                location = locationHeader.getValue();
//                System.out.println("The page was redirected to:" + location);
//                response = methodPost(location, data);// 用跳转后的页面重新请求。
//            } else {
//                System.err.println("Location field value is null.");
//            }
//        } else {
//            System.out.println(postMethod.getStatusLine());
//
//            try {
//                response = postMethod.getResponseBodyAsString();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//            postMethod.releaseConnection();
//        }
        return response;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        String url = "/";
        Map<String, String> m = new HashMap<String, String>();
        m.put("key", "nike");
        m.put("proClass", "");
        NameValuePair[] data = { new NameValuePair("key", "nike"), new NameValuePair("proClass", "") };
        String response = methodPost(url, data);
        System.out.println(response);
    }

}
